package main

import (
	"fmt"
)

// 自己实现的 set
/****************************************/

type Set struct {
	s map[int]int
}

func set() *Set {
	return &Set{s: make(map[int]int, 0)}
}

func (this *Set) insert(key int) {
	this.s[key] = -1
}

func (this *Set) erase(key int) {
	delete(this.s, key)
}

func (this *Set) size() int {
	return len(this.s)
}

func (this *Set) contains(key int) bool {
	if _, ok := this.s[key]; ok {
		return true
	} else {
		return false
	}
}

func (this *Set) empty() bool {
	return len(this.s) == 0
}

func (this *Set) clear() {
	this.s = make(map[int]int, 0)
}
/****************************************/

func main() {

	// 定义 set，元素不能重复，无序
	S := set()
	// set 中插入、删除元素
	S.insert(20)
	S.insert(3)
	S.insert(40)
	S.erase(3)
	// 遍历 set
	for key := range S.s { fmt.Println(key) }
	// 判断是否存在某个元素
	fmt.Println(S.contains(20))  // true
	// 清空 set
	S.clear()
	fmt.Println(S.size())  // 0
	fmt.Println(S.empty())  // true
}
